什么是压测,为什么要进行压力测试?JMeter工具的使用

Java小课堂 BY武汉分院

分享人:甘乐

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

性能测试是通过自动化的测试工具模拟多种正常峰值和异常负载条件来对系统的各项性能指标进行测试。 性能测试包括负载测试,强度测试容量测试等.

通过负载测试,确定在各种工作负载下系统的性能,目标是当负载逐渐增加时,测试系统各项性能指标的变 化的情况.
压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试.

在Web性能测试领域,有两种工具广泛使用:LoadRunner和JMeter.

2.知识剖析

1.性能测试的目的

性能测试的目的是验证软件系统能否达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈, 以优化软件,最后起到优化系统的目的.包括以下结构方面:

  1. 评估系统的能力;
  2. 识别系统中的弱点;
  3. 系统调优;
  4. 测试软件中的问题;
  5. 验证稳定性(Resilience)和可靠性(Reliability);

2.性能测试的常见指标

对于B/S架构,一般关注Web服务器性能指标:

  • avg rps:平均每秒钟的响应次数=总次数/秒数
  • avg time to last byte per terstion(mstes):平均每秒业务脚本的迭代次数
  • successful rounds:成功的请求
  • failed rounds:失败的请求
  • successful hits:成功的点击次数
  • failed hits:失败的点击次数
  • hits per second:每秒点击次数
  • successful hits per second:每秒成功的点击次数
  • failed hits per second:每秒失败的点击次数
  • attempted connections:尝试连接数
  • throughput:吞吐率

对于C/S架构,由于后台通常为数据库,一般关注数据库的性能测试:

  • user connections:数据库连接数量
  • number of deadlock:数据库死锁
  • butter cache hits:数据库cache的命中情况

3.JMeter GUI 基本操作

  1. 添加/移除测试原件,其中打开,合并命令,从外部文件中加载和添加测试单元;
  2. 加载和移除测试单元;
  3. 配置测试树中的测试单元;
  4. 保存测试计划(非必需);
  5. 运行测试计划;
  6. 加载和移除测试单元;
  7. 终止测试或者测试自行结束,查看结果;
  8. 错误报告,JMeter会把日志信息记录到jmeter.log文件,同时也会输出到控制台.

4.JMeter常用测试单元

  1. 线程组,所有测试计划的起点,所有的逻辑控制器和采样器都必须放在线程组之下.常用参数:
    • 设置线程数量(Numbers of Threads)
    • 设置线程启动周期(Ramp-Up Period)
    • 设置执行测试脚本的循环次数(Loop Count)
  2. 控制器
    • 采样器,被JMeter用来向服务器发送请求,并等待响应;
    • 逻辑控制器,控制JMeter的测试逻辑,特别是何时发送请求.
  3. 监听器,提供了对JMeter在测试期间收集到的信息的访问方法.

4.定时器,默认情况下,线程在发送请求之间没有间隔,添加一种定时器,以便设定请求之间间隔多长时间.

5.断言,检查从服务器获取的响应内容.

6.Sample与采样器紧密相连,不发送请求,可以添加或者修改请求.

7.前置处理器,在采样器发出请求之前做一些特殊操作.

8.后置处理器,在采样器发出请求之后做一些特殊操作,常用来从响应中提取数据.

5.JMeter执行顺序规则

配置元件----前置处理器----定时器----采样器---- 后置处理器(除非服务器响应为空)-----断言(除非服务器响应为空)----监听器(除非服务器响应为空)

6.JMeter测试结果

  • label:定义HTTP请求名称
  • samples:表示这次测试中一共发出了多少个请求
  • average:平均响应时长,默认情况下是单个request的平均响应时长
  • median:中位数,50%用户的响应时长(50%阈值)
  • 90%line:90%用户的响应时长(90%阈值)
  • min:访问页面的最小响应时长
  • max:访问页面的最大响应时长
  • error%:错误请求数量/请求总数
  • throughput:默认情况下表示每秒完成的请求数
  • KB/sec:每秒从服务器接收到的数据量

3.常见问题

为什么常用Badboy录制Web性能测试脚本,而不是选择JMeter代理录制?

4.解决方案

JMeter代理不支持HTTPS协议,原因在于代理无法破译HTTPS通信内容, 并录制请求参数或者Cookie. 只有设置密钥库后,JMeter代理才可以录制HTTPS请求。而Badboy作为 一种自动化测试工具,不仅支持对HTTPS协议的录制,本身也具有许多丰富且强大的功能, 简化开发人 员的测试工作.

Badboy is a powerful tool designed to aid in testing and development of complex dynamic applications. Badboy makes web testing and development easier with dozens of features including a simple yet comprehensive capture/replay interface, powerful load testing support, detailed reports, graphs and much more!

5.编码实战

创建Web测试计划.

6.扩展思考

性能测试结果的分析在完成JMeter测试脚本执行后.首先要做的就是判断收集到的测试数据是否真实有效,对无效的测试数据进行分析, 无端了浪费时间和精力.通常判断测试数据是否有效的方法如下:

  1. 分析在整个测试执行期间,测试环境是否稳定正常. 常见异常:CPU占用达到100%,内存占用很高,测试网络出现拥塞导致响应延迟,待测系统参数配置错误(JDBC连接池等);
  2. 检查JMeter测试脚本参数是否设置合理,建行擦JMeter运行模式是否合理,如Ramp-Up Period参数设置.
  3. 检查测试结果是否暴露了系统瓶颈.重点关注异常的测试结果,如果测试结果一切正常,首先需要考虑的是并发数是否足够多,压测是否足够大,或者待测系统是否存在压力屏蔽机制等.

7.参考文献

  1. 零成本实现Web性能测试-----基于Apache JMeter.
    温素剑  编著.  北京.  电子工业出版社  2012
  2. 博客    BadBoy自动化测试工具

8.更多讨论

今天的分享就到这里,感谢诸君围观!